// 最大子数组和

// 给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。

// 子数组是数组中的一个连续部分。

// 示例 1：
// 输入：nums = [-2,1,-3,4,-1,2,1,-5,4]
// 输出：6
// 解释：连续子数组 [4,-1,2,1] 的和最大，为 6 。

// 示例 2：
// 输入：nums = [1]
// 输出：1

// 示例 3：
// 输入：nums = [5,4,-1,7,8]
// 输出：23


// 贪心算法：累加当前和，若负则重置。

function maxSubArray(nums) {
  // 初始化最大和为数组第一个元素，当前和为 0
  let maxSum = nums[0], currentSum = 0;
  // 遍历数组
  for (let num of nums) {
    // 累加当前和
    currentSum += num;
    // 如果当前和大于最大和，则更新最大和
    if (currentSum > maxSum) {
      maxSum = currentSum;
    }
    // 如果当前和小于 0，则重置当前和为 0
    if (currentSum < 0) {
      currentSum = 0;
    }
  }
  // 返回最大和
  return maxSum;
}